const treeData = require("./treeData")

/**
 * 基于深度优先对一棵树进行深拷贝
 * 通过递归实现的深度优先
 * @param {*} node 原树
 * @param {*} parent 遍历过程中当前节点的父节点
 * @param {*} newNode 新树
 * @returns 
 */
function copyTreeByDepth(node,parent,newNode){
    if(!node){
        return
    }
    // console.log("node:",node.value)
    if(!parent){//当前节点为根节点
        newNode.value = node.value
        newNode.children = []
        parent = newNode
    }else{//当前节点为子节点
        let temp = {value:node.value,children:[]}   //基于原节点创建一个新的节点
        parent.children.push(temp)      //把新创建的节点保存到父节点的children属性中，建立父子关系
        parent = temp   //设置新创建子节点为父节点，等待后面使用,在递归当中，parent每个函数调用的时候都会在内部保存起来，标识当前节点的子节点的父节节点
    }
    node.children.length && node.children.forEach(nodeItem=>{
        if(nodeItem.children.length >0){
            copyTreeByDepth(nodeItem,parent)
        }else{//当前节点为叶子节点
            // console.log("node:",nodeItem.value)
            //创建新的节点并保存到父节点的children属性中
            parent.children.push({value:nodeItem.value,children:[]})
        }
    })
}

function testCopyTreeByDepth(){
    const tree = treeData.getTree()
    const newTree = {
    //    value:tree.value,
    //    children:[]
    }
    copyTreeByDepth(tree,null,newTree)
    console.log(newTree)
}
testCopyTreeByDepth()